package java_thinking.unit_7._7_8;

/**
 * @Description :
 * 分析:
 * 1:LoadClassDemo singleTon = LoadClassDemo.getInstance();调用了类的LoadClassDemo调用了类的静态方法，触发类的初始化
 * 2:类加载的时候在准备过程中为类的静态变量分配内存并初始化默认值 singleton=null count1=0,count2=0
 * 3:类初始化化，为类的静态变量赋值和执行静态代码快。singleton赋值为new LoadClassDemo()调用类的构造方法
 * 4:调用类的构造方法后count=1;count2=1
 * 5:继续为count1与count2赋值,此时count1没有赋值操作,所有count1为1,但是count2执行赋值操作就变为0
 * 参考：http://www.cnblogs.com/javaee6/p/3714716.html?utm_source=tuicool&utm_medium=referral
 *
 * 6.子类调用父类的静态变量，子类不会被初始化。只有父类被初始化。对于静态字段，只有直接定义这个字段的类才会被初始化.
 * 7.通过数组定义来引用类，不会触发类的初始化
 * 8.访问类的常量，不会初始化类
 * @author: cww
 * @DateTime: 2019-02-26 22:18
 */

public class LoadClassDemo {
    private static LoadClassDemo singleTon = new LoadClassDemo();
    public static int count1;
    public static int count2 = 0;

    private LoadClassDemo() {
        System.out.println("count1="+count1);
        count1++;
        count2++;
    }

    public static LoadClassDemo getInstance() {
        return singleTon;

    }
}

 class LoadClassTest {
    public static void main(String[] args) {
        LoadClassDemo singleTon = LoadClassDemo.getInstance();
        System.out.println("count1=" + singleTon.count1);
        System.out.println("count2=" + singleTon.count2);
    }

}